﻿using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Collections.Generic;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using GC2.Entities.Seguridad;
using GC2.Bussines.BMSeguridad;
using GC2.ExceptionHandler;

public partial class MasterPage : GenericMasterPage
{

    //private DefaultMasterPresenter _presenter = new DefaultMasterPresenter();
    private Usuarios usuario = new Usuarios();

    //private string escribirMaster
    //{
    //    get
    //    {
    //        if (ViewState["escribirMaster"] != "")
    //            return (string)ViewState["escribirMaster"];
    //        else
    //            return "pepe";
    //    }

    //    set
    //    {
    //        this.ViewState["escribirMaster"] = value;
    //    }
    //}

    protected void Page_Load(object sender, EventArgs e)
    {
        try
        {            
            //SetearCultura();
            //SetearConexion();

            //WindowsIdentity windowsIdentity = WindowsIdentity.GetCurrent();
            //WindowsPrincipal windowsPrincipal = new WindowsPrincipal(windowsIdentity);
            //_userName = Request.ServerVariables["logon_user"]; //windowsPrincipal.Identity.Name;
            usuario = (Usuarios)Session["UsuarioActual"];
            string user;
            user = usuario.Apellido;
            user += ", ";
            user += usuario.Nombres;
            mlblUsuario.Text = usuario.Login + " (" + usuario.Cliente + ")";
            mlblFecha.Text = DateTime.Now.ToLongDateString();
            //Page.ClientScript.GetPostBackEventReference(this, String.Empty);

            if (!this.IsPostBack)
            {
                generarArbol();
            }
        }
        catch (Exception ex) { ErrorUI(ex); }
    }

    /// <Summary>
    /// Genera el treeview de acuerdo a los permisos del usuario logueado.
    /// Se llama al cargarse por primera vez la página
    /// 
    /// Moficado por: MDT  Fecha: 15/08/2007
    /// Motivo del Cambio: 
    /// 
    /// </Summary>
    /// <returns></returns>
    private void generarArbol()
    {
        try
        {
            string target = "_parent";
            //int id_Usuario = Convert.ToInt32(Session["Id_Usuario"]);
            Usuarios usuario = (Usuarios)Session["UsuarioActual"];

            TreeNode nodoDefault = new TreeNode("Menu Sistema", "1", null, "~/Seguridad/Default.aspx", target);
            TreeNode nodoAdmin = new TreeNode("Administracion", "1", null, null, target);
            TreeNode ventasNode = new TreeNode("Cargar Ventas", "1", null, "~/Admin/Ventas.aspx", target);
            TreeNode comprasNode = new TreeNode("Cargar Compras", "2", null, "~/Admin/Compras.aspx", target);            
            TreeNode cajaNode = new TreeNode("Caja", "3", null, "~/Admin/Caja.aspx", target);            
            TreeNode clientesNode = new TreeNode("Clientes", "4", null, "~/Clientes/ClientesAdmin.aspx", target);
            TreeNode cobranzaNode = new TreeNode("Cobranza", "5", null, "~/Informes/ClientesAdmin.aspx", target);
            TreeNode proveedoresNode = new TreeNode("Proveedores", "6", null, "~/Proveedores/ProveedoresAdmin.aspx", target);
            TreeNode pagosNode = new TreeNode("Pagos", "7", null, "~/Proveedores/Pagos.aspx", target);
            TreeNode conceptosNode = new TreeNode("Conceptos", "8", null, "~/Admin/ConceptosAdmin.aspx", target);
            TreeNode gastosNode = new TreeNode("Gastos", "9", null, "~/Admin/GastosImpuestos.aspx", target);
            TreeNode notaCredNode = new TreeNode("Nota de Crédito", "10", null, "~/Admin/NotaCred.aspx", target);
            TreeNode remitosNode = new TreeNode("Remitos", "11", null, "~/Admin/Remitos.aspx", target);
            TreeNode cuponRecNode = new TreeNode("Cupon Recibo", "11", null, "~/Admin/CuponRecibo.aspx", target); 

                        
            TreeNode nodoInformes = new TreeNode("Informes", "2", null, null, target);
            TreeNode listaClientesNode = new TreeNode("Lista Clientes", "1", null, "~/Informes/ListaClientes.aspx", target);
            TreeNode ventasClienteNode = new TreeNode("por Cliente", "2", null, "~/Informes/ClientesAdmin.aspx", target);
            TreeNode comprasProveedorNode = new TreeNode("por Proveedor", "3", null, "~/Informes/ProveedoresAdmin.aspx", target);
            TreeNode porEgresosNode = new TreeNode("por Egresos", "4", null, "~/Informes/EgresosAdmin.aspx", target);
            TreeNode porIngresosNode = new TreeNode("por Ingresos", "5", null, "~/Informes/IngresosAdmin.aspx", target);
            TreeNode detalleIngresoNode = new TreeNode("Detalle Ingreso", "6", null, "~/Informes/detalleIngresoAdmin.aspx", target);
            TreeNode articuloNode = new TreeNode("por Artículo", "7", null, "~/Informes/StockAdmin.aspx", target);
            TreeNode flujofondosNode = new TreeNode("Flujo Fondos", "8", null, "~/Informes/FlujoFondos.aspx", target);
            TreeNode verVentasNode = new TreeNode("Ver Ventas", "9", null, "~/Admin/VerVentas.aspx", target);
            TreeNode verRemitosNode = new TreeNode("Ver Remitos", "10", null, "~/Admin/VerRemitos.aspx", target);
            TreeNode verComprasNode = new TreeNode("Ver Compras", "11", null, "~/Admin/VerCompras.aspx", target);
            TreeNode verGastosNode = new TreeNode("Ver Gastos", "12", null, "~/Admin/VerGastos.aspx", target);
            TreeNode verCajasNode = new TreeNode("Ver Cajas", "13", null, "~/Admin/VerCajas.aspx", target);
            TreeNode verChequesNode = new TreeNode("Ver Cheques", "14", null, "~/Admin/VerCheques.aspx", target);
            TreeNode indicadoresNode = new TreeNode("Indicadores", "15", null, "~/Informes/Indicadores.aspx", target);

            TreeNode nodoStock= new TreeNode("Stock", "3", null, null, target);
            TreeNode rubrosNode = new TreeNode("Rubros", "1", null, "~/Stock/RubrosAdmin.aspx", target);
            TreeNode subrubrosNode = new TreeNode("Sub Rubros", "2", null, "~/Stock/SubRubrosAdmin.aspx", target);
            TreeNode articulosNode = new TreeNode("Artículos", "3", null, "~/Stock/StockAdmin.aspx", target);
            TreeNode lotesvtoNode = new TreeNode("Vto. Lotes", "4", null, "~/Stock/LotesVto.aspx", target);

            TreeNode nodoPersonal = new TreeNode("Personal", "4", null, null, target);
            TreeNode empleadosNode = new TreeNode("Empleados", "1", null, "~/Empleados/EmpleadosAdmin.aspx", target);
            TreeNode tareasNode = new TreeNode("Tareas", "2", null, "~/Empleados/TareasAdmin.aspx", target);
            TreeNode sueldosNode = new TreeNode("Sueldos", "3", null, "~/Empleados/Sueldos.aspx", target);
            TreeNode faltasNode = new TreeNode("Cargar Faltas", "4", null, "~/Empleados/Faltas.aspx", target);
            TreeNode verfaltasNode = new TreeNode("Ver Faltas", "5", null, "~/Empleados/FaltasPorEmpleado.aspx", target);

            TreeNode nodoParametros = new TreeNode("Parametros", "5", null, null, target);
            TreeNode impuestos = new TreeNode("Impuestos", "1", null, "~/Parametros/Impuestos.aspx", target);
            TreeNode talonarios = new TreeNode("Talonarios", "2", null, "~/Parametros/Talonarios.aspx", target);
            TreeNode pfCompras = new TreeNode("Período Fiscal", "3", null, "~/Parametros/PFCompras.aspx", target);
            TreeNode pLogistica = new TreeNode("Logistica", "4", null, "~/Parametros/PPLogistica.aspx", target);
            TreeNode ccostos = new TreeNode("Centros Costos", "5", null, "~/Parametros/CCostosAdmin.aspx", target);

            TreeNode nodoLogistica = new TreeNode("Logistica", "6", null, null, target);
            TreeNode rodadosNode = new TreeNode("Rodados", "1", null, "~/Logistica/RodadosAdmin.aspx", target);
            TreeNode consumosNode = new TreeNode("Consumos", "2", null, "~/Logistica/VerConsumos.aspx", target);
            TreeNode hrutasNode = new TreeNode("Hojas Ruta", "3", null, "~/Logistica/HRutasAdmin.aspx", target);
            TreeNode entregarNode = new TreeNode("Entregar", "4", null, "~/Logistica/HRutasEntregar.aspx", target);
            TreeNode imputarNode = new TreeNode("Imputar", "5", null, "~/Logistica/HRutasImputar.aspx", target);
            TreeNode buscarNode = new TreeNode("Buscar Item", "6", null, "~/Logistica/HRutasBuscarItem.aspx", target);

            TreeNode nodoBMSeguridad = new TreeNode("Seguridad", "7", null, "~/Seguridad/Default.aspx", target);
            TreeNode aplicacionesNode = new TreeNode("Aplicaciones", "1", null, "~/Seguridad/AdministracionAplicaciones.aspx", target);
            TreeNode rolesNode = new TreeNode("Roles", "2", null, "~/Seguridad/AdministracionRoles.aspx", target);
            TreeNode gruposNode = new TreeNode("Grupos", "3", null, "~/Seguridad/AdministracionGrupos.aspx", target);
            TreeNode permisosNode = new TreeNode("Permisos", "4", null, "~/Seguridad/AdministracionPermisos.aspx", target);
            TreeNode usuariosNode = new TreeNode("Usuarios", "5", null, "~/Seguridad/AdministracionUsuarios.aspx", target);
            TreeNode passwordNode = new TreeNode("Cambiar Password", "6", null, "~/Seguridad/CambiarPassword.aspx", target);

            TreeNode nodoCerrarSession = null;
            if (Session["UsuarioActual"] != null)
            {
                if (((Usuarios)Session["UsuarioActual"]).Cliente.ToLower().Equals("demo"))
                {
                    nodoCerrarSession = new TreeNode("Salir", "3", null, "http://www.weco-it.com/gestion/gestion.html", target);
                }
                else
                {
                    nodoCerrarSession = new TreeNode("Salir", "3", null, "~/Default.aspx", target);
                }
            }

            if (Session["UsuarioActual"] != null)
            {
                if (((Usuarios)Session["UsuarioActual"]).Cliente.ToLower().Equals("c075"))
                {
                    nodoAdmin.ChildNodes.Add(clientesNode);
                    nodoAdmin.ChildNodes.Add(cuponRecNode);

                    nodoDefault.ChildNodes.Add(nodoAdmin);
                }
                else
                {
                    nodoAdmin.ChildNodes.Add(ventasNode);
                    nodoAdmin.ChildNodes.Add(comprasNode);
                    nodoAdmin.ChildNodes.Add(cajaNode);
                    nodoAdmin.ChildNodes.Add(clientesNode);
                    nodoAdmin.ChildNodes.Add(cobranzaNode);
                    nodoAdmin.ChildNodes.Add(proveedoresNode);
                    nodoAdmin.ChildNodes.Add(pagosNode);
                    nodoAdmin.ChildNodes.Add(conceptosNode);
                    nodoAdmin.ChildNodes.Add(gastosNode);
                    nodoAdmin.ChildNodes.Add(notaCredNode);
                    nodoAdmin.ChildNodes.Add(remitosNode);
                    nodoAdmin.ChildNodes.Add(cuponRecNode);


                    if (usuario.Clase == "control")
                    {
                        // Menu 2 Informes
                        nodoInformes.ChildNodes.Add(listaClientesNode);
                        nodoInformes.ChildNodes.Add(ventasClienteNode);
                        nodoInformes.ChildNodes.Add(comprasProveedorNode);
                        nodoInformes.ChildNodes.Add(porEgresosNode);
                        nodoInformes.ChildNodes.Add(porIngresosNode);
                        nodoInformes.ChildNodes.Add(detalleIngresoNode);
                        nodoInformes.ChildNodes.Add(articuloNode);
                        nodoInformes.ChildNodes.Add(flujofondosNode);
                        nodoInformes.ChildNodes.Add(verVentasNode);
                        nodoInformes.ChildNodes.Add(verRemitosNode);
                        nodoInformes.ChildNodes.Add(verComprasNode);
                        nodoInformes.ChildNodes.Add(verGastosNode);
                        nodoInformes.ChildNodes.Add(verCajasNode);
                        nodoInformes.ChildNodes.Add(verChequesNode);
                        nodoInformes.ChildNodes.Add(indicadoresNode);
                        nodoAdmin.ChildNodes.Add(nodoInformes);
                        // Menu 3 Stock
                        nodoStock.ChildNodes.Add(rubrosNode);
                        nodoStock.ChildNodes.Add(subrubrosNode);
                        nodoStock.ChildNodes.Add(articulosNode);
                        nodoStock.ChildNodes.Add(lotesvtoNode);
                        nodoAdmin.ChildNodes.Add(nodoStock);
                        // Menu 4 Personal
                        nodoPersonal.ChildNodes.Add(empleadosNode);
                        nodoPersonal.ChildNodes.Add(tareasNode);
                        nodoPersonal.ChildNodes.Add(faltasNode);
                        nodoPersonal.ChildNodes.Add(verfaltasNode);
                        nodoPersonal.ChildNodes.Add(sueldosNode);
                        nodoAdmin.ChildNodes.Add(nodoPersonal);
                        // Menu 5 Parametros
                        nodoParametros.ChildNodes.Add(ccostos);
                        nodoParametros.ChildNodes.Add(impuestos);
                        nodoParametros.ChildNodes.Add(talonarios);
                        nodoParametros.ChildNodes.Add(pfCompras);
                        nodoParametros.ChildNodes.Add(pLogistica);
                        nodoAdmin.ChildNodes.Add(nodoParametros);
                        // Menu 6 Logistica
                        nodoLogistica.ChildNodes.Add(consumosNode);
                        nodoLogistica.ChildNodes.Add(hrutasNode);
                        nodoLogistica.ChildNodes.Add(imputarNode);
                        nodoLogistica.ChildNodes.Add(buscarNode);
                        // Menu 7 Seguridad               
                        nodoBMSeguridad.ChildNodes.Add(usuariosNode);
                    }

                    #region Menu Supervisor
                    if (usuario.Clase == "super")
                    {
                        // MENU SUPERVISOR
                        List<SuperMenu> listaMenu = new List<SuperMenu>();
                        SuperMenu menu = new SuperMenu();
                        menu.Id_Usuario = usuario.Id_Usuario;
                        if ((Session["listaMenu"] == null))
                        {
                            BMSuperMenu bmSuperMenu = new BMSuperMenu(usuario.Cliente);
                            listaMenu = bmSuperMenu.BMSuperMenuGetAll(menu);
                            Session["listaMenu"] = listaMenu;
                        }
                        else
                        {
                            listaMenu = (List<SuperMenu>)Session["listaMenu"];
                        }
                        int iMenu2 = 0;
                        int iMenu3 = 0;
                        int iMenu4 = 0;
                        int iMenu5 = 0;
                        foreach (SuperMenu item in listaMenu)
                        {
                            if (item.Menu == 2)
                            {
                                // Menu 2 Informes
                                iMenu2++;
                                switch (item.IdTarea)
                                {
                                    case 1:
                                        nodoInformes.ChildNodes.Add(ventasClienteNode);
                                        break;
                                    case 2:
                                        nodoInformes.ChildNodes.Add(comprasProveedorNode);
                                        break;
                                    case 3:
                                        nodoInformes.ChildNodes.Add(porEgresosNode);
                                        break;
                                    case 4:
                                        nodoInformes.ChildNodes.Add(porIngresosNode);
                                        break;
                                    case 5:
                                        nodoInformes.ChildNodes.Add(detalleIngresoNode);
                                        break;
                                    case 6:
                                        nodoInformes.ChildNodes.Add(articuloNode);
                                        break;
                                    case 7:
                                        nodoInformes.ChildNodes.Add(flujofondosNode);
                                        break;
                                    case 8:
                                        nodoInformes.ChildNodes.Add(verVentasNode);
                                        break;
                                    case 9:
                                        nodoInformes.ChildNodes.Add(verRemitosNode);
                                        break;
                                    case 10:
                                        nodoInformes.ChildNodes.Add(verComprasNode);
                                        break;
                                    case 11:
                                        nodoInformes.ChildNodes.Add(verGastosNode);
                                        break;
                                    case 12:
                                        nodoInformes.ChildNodes.Add(verCajasNode);
                                        break;
                                    case 13:
                                        nodoInformes.ChildNodes.Add(verChequesNode);
                                        break;
                                    case 14:
                                        nodoInformes.ChildNodes.Add(indicadoresNode);
                                        break;
                                    default:
                                        break;
                                }
                            }
                            if (item.Menu == 3)
                            {
                                // Menu 3 Stock
                                iMenu3++;
                                switch (item.IdTarea)
                                {
                                    case 1:
                                        nodoStock.ChildNodes.Add(rubrosNode);
                                        break;
                                    case 2:
                                        nodoStock.ChildNodes.Add(subrubrosNode);
                                        break;
                                    case 3:
                                        nodoStock.ChildNodes.Add(articulosNode);
                                        break;
                                    case 4:
                                        nodoStock.ChildNodes.Add(lotesvtoNode);
                                        break;
                                    default:
                                        break;
                                }
                            }
                            if (item.Menu == 4)
                            {
                                // Menu 4 Personal
                                iMenu4++;
                                switch (item.IdTarea)
                                {
                                    case 1:
                                        nodoPersonal.ChildNodes.Add(empleadosNode);
                                        break;
                                    case 2:
                                        nodoPersonal.ChildNodes.Add(tareasNode);
                                        break;
                                    case 3:
                                        nodoPersonal.ChildNodes.Add(faltasNode);
                                        break;
                                    case 4:
                                        nodoPersonal.ChildNodes.Add(verfaltasNode);
                                        break;
                                    case 5:
                                        nodoPersonal.ChildNodes.Add(sueldosNode);
                                        break;
                                    default:
                                        break;
                                }
                            }
                            if (item.Menu == 5)
                            {
                                // Menu 5 Parametros
                                iMenu5++;
                                switch (item.IdTarea)
                                {
                                    case 1:
                                        nodoParametros.ChildNodes.Add(impuestos);
                                        break;
                                    case 2:
                                        nodoParametros.ChildNodes.Add(talonarios);
                                        break;
                                    case 3:
                                        nodoParametros.ChildNodes.Add(pfCompras);
                                        break;
                                    case 4:
                                        nodoParametros.ChildNodes.Add(pLogistica);
                                        break;
                                    default:
                                        break;
                                }
                            }
                            if (item.Menu == 6)
                            {
                                // Menu 6 Logistica
                                switch (item.IdTarea)
                                {
                                    case 1:
                                        nodoLogistica.ChildNodes.Add(consumosNode);
                                        break;
                                    case 2:
                                        nodoLogistica.ChildNodes.Add(hrutasNode);
                                        break;
                                    case 3:
                                        nodoLogistica.ChildNodes.Add(imputarNode);
                                        break;
                                    case 4:
                                        nodoLogistica.ChildNodes.Add(buscarNode);
                                        break;
                                    default:
                                        break;
                                }
                            }
                            if (item.Menu == 7)
                            {
                                // Menu 7 Seguridad 
                                switch (item.IdTarea)
                                {
                                    case 1:
                                        nodoBMSeguridad.ChildNodes.Add(usuariosNode);
                                        break;
                                    default:
                                        break;
                                }
                            }
                        }

                        if (iMenu2 > 0)
                        {
                            nodoAdmin.ChildNodes.Add(nodoInformes);
                        }
                        if (iMenu3 > 0)
                        {
                            nodoAdmin.ChildNodes.Add(nodoStock);
                        }
                        if (iMenu4 > 0)
                        {
                            nodoAdmin.ChildNodes.Add(nodoPersonal);
                        }
                        if (iMenu5 > 0)
                        {
                            nodoAdmin.ChildNodes.Add(nodoParametros);
                        }
                        // FIN MENU SUPERVISOR               
                    }
                    #endregion

                    nodoDefault.ChildNodes.Add(nodoAdmin);

                    nodoLogistica.ChildNodes.Add(rodadosNode);
                    nodoLogistica.ChildNodes.Add(entregarNode);
                    nodoDefault.ChildNodes.Add(nodoLogistica);
                }
            }
            
            

            nodoBMSeguridad.ChildNodes.Add(passwordNode);
            nodoDefault.ChildNodes.Add(nodoBMSeguridad);

            nodoDefault.ChildNodes.Add(nodoCerrarSession);

            // El nodo SCOMSP siempre es visible
            NavigationTreeView.Nodes.Add(nodoDefault);
            NavigationTreeView.Visible = true;
        }
        catch (Exception ex) { ErrorUI(ex); }
    }

    //#region Manejo de Excepciones
    ///// <ErrorUI>
    ///// Rutina de Error para Interfaz de Usuario
    ///// CB 06-07-2007
    ///// </ErrorUI>
    ///// <param name="ex"></param>
    //public void ErrorUI(Exception ex)
    //{
    //    ExceptionConstructor exNew = new ExceptionConstructor();
    //    string InfoError = (exNew.ProcessUnhandledException(ex)).ToString();

    //    Session["Error"] = InfoError;
    //    Session["UrlOrigen"] = "~/Seguridad/Default.aspx";
    //    Response.Redirect("~/Error.aspx", false);
    //}
    //#endregion
}

